#include <bits/stdc++.h>
#define PR(x) printf(x ? "YES\n" : "NO\n")
#define pr(x) printf(x ? "Yes\n" : "No\n")
#define mk make_pair
#define pb emplace_back
#define fi first
#define se second
#define pii pair<int, int>
#define fore(i, u) for (int i = h[u]; i; i = e[i].nxt)
#define all(x) x.begin(), x.end()
#define int long long

using namespace std;
inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (! isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); }
	while (isdigit(ch)) { x = x * 10 + ch - 48; ch = getchar(); }
	return x * f;
}

const int maxn = 1e5 + 10;
int id, q, n, cnt, a[maxn];

struct Node { int l, r, va, s; };
struct Temp { int y, l, r, b; } p[maxn << 2];
struct Rect { int a, b, c, d; } rec[maxn];

bool cmp(Temp a, Temp b) {
    return a.y == b.y ? a.b > b.b : a.y < b.y;
}

namespace seg {
    Node t[maxn << 2];
    void up(int p) {
        if (t[p].va) t[p].s = a[t[p].r + 1] - a[t[p].l];
        else t[p].s = t[p << 1].s + t[p << 1 | 1].s;
    }
    
    void bld(int p, int l, int r) {
        t[p].l = l, t[p].r = r, t[p].va = t[p].s = 0;

        if (l == r) return t[p << 1] = t[p << 1 | 1] = Node {0, 0, 0, 0}, void();

        int m = (l + r) >> 1;
        bld(p << 1, l, m);
        bld(p << 1 | 1, m + 1, r);
    }
    
    void mdf(int p, int l, int r, int v) {
        if (r <= a[t[p].l] || a[t[p].r + 1] <= l) return;
        if (l <= a[t[p].l] && a[t[p].r + 1] <= r) {
            t[p].va += v, up(p); return;
        }

        mdf(p << 1, l, r, v);
        mdf(p << 1 | 1, l, r, v), up(p);
    }
}

signed main() {

	freopen("dierti.in", "r", stdin);
	freopen("dierti.out", "w", stdout);
	
	id = read(), n = read(), q = read();
	for (int i = 1; i <= n; i ++) 
		rec[i] = Rect {read(), read(), read(), read()};
	
	while (q --) {
		int l = read(), r = read();

		cnt = 0;
		for (int i = l; i <= r; i++) {
			auto [x1, y1, x2, y2] = rec[i];
			p[++ cnt] = Temp {y1, x1, x2, 1}, a[cnt] = x1;
			p[++ cnt] = Temp {y2, x1, x2, -1}, a[cnt] = x2;
		}

		int ans = 0;
		sort(p + 1, p + cnt + 1, cmp);
		sort(a + 1, a + cnt + 1);
		int q = unique(a + 1, a + cnt + 1) - a - 1;
		seg :: bld(1, 1, q - 1);

		for (int i = 1; i < cnt; i++) {
			seg :: mdf(1, p[i].l, p[i].r, p[i].b);
			ans += seg :: t[1].s * (p[i + 1].y - p[i].y);
		}

		cout << ans << '\n';
	}

	return 0;
}